<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<link rel="stylesheet" href="./css/bootstrap.min.css">  
<link rel="icon" href="./img/tx1.jpg" type="image/x-icon">
<link rel="stylesheet" href="./css/index.css">
<title>知否</title><link href='https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext' rel='stylesheet' type='text/css' /><style type='text/css'>html {overflow-x: initial !important;}:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 40px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
@media screen and (max-width: 500px) {
  body.typora-export { padding-left: 0px; padding-right: 0px; }
  #write { padding-left: 20px; padding-right: 20px; }
  .CodeMirror-sizer { margin-left: 0px !important; }
  .CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-diagram-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
  body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
  #write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
  .typora-export * { -webkit-print-color-adjust: exact; }
  html.blink-to-pdf { font-size: 13px; }
  .typora-export #write { padding-left: 32px; padding-right: 32px; padding-bottom: 0px; break-after: avoid; }
  .typora-export #write::after { height: 0px; }
  .is-mac table { break-inside: avoid; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
  .md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
  .md-toc-h4 .md-toc-inner { margin-left: 5em; }
  .md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
  .md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.md-inline-math .MathJax_SVG .noError { display: none !important; }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px; }
.md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; overflow-y: hidden; display: block !important; }
.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important; }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace); }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif; }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; zoom: 90%; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; }
.MathJax_SVG * { transition: none 0s ease 0s; }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important; margin-top: 0px !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
svg[id^="mermaidChart"] { line-height: 1em; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
mark .md-meta { color: rgb(0, 0, 0); opacity: 0.3 !important; }


:root {
    --side-bar-bg-color: #fafafa;
    --control-text-color: #777;
}

@include-when-export url(https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);

/* open-sans-regular - latin-ext_latin */
  /* open-sans-italic - latin-ext_latin */
    /* open-sans-700 - latin-ext_latin */
    /* open-sans-700italic - latin-ext_latin */
  html {
    font-size: 16px;
}

body {
    font-family: "Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
    color: rgb(51, 51, 51);
    line-height: 1.6;
}

#write {
    max-width: 860px;
  	margin: 0 auto;
  	padding: 30px;
    padding-bottom: 100px;
}

@media only screen and (min-width: 1400px) {
	#write {
		max-width: 1024px;
	}
}

@media only screen and (min-width: 1800px) {
	#write {
		max-width: 1200px;
	}
}

#write > ul:first-child,
#write > ol:first-child{
    margin-top: 30px;
}

a {
    color: #4183C4;
}
h1,
h2,
h3,
h4,
h5,
h6 {
    position: relative;
    margin-top: 1rem;
    margin-bottom: 1rem;
    font-weight: bold;
    line-height: 1.4;
    cursor: text;
}
h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
    text-decoration: none;
}
h1 tt,
h1 code {
    font-size: inherit;
}
h2 tt,
h2 code {
    font-size: inherit;
}
h3 tt,
h3 code {
    font-size: inherit;
}
h4 tt,
h4 code {
    font-size: inherit;
}
h5 tt,
h5 code {
    font-size: inherit;
}
h6 tt,
h6 code {
    font-size: inherit;
}
h1 {
    padding-bottom: .3em;
    font-size: 2.25em;
    line-height: 1.2;
    border-bottom: 1px solid #eee;
}
h2 {
   padding-bottom: .3em;
    font-size: 1.75em;
    line-height: 1.225;
    border-bottom: 1px solid #eee;
}
h3 {
    font-size: 1.5em;
    line-height: 1.43;
}
h4 {
    font-size: 1.25em;
}
h5 {
    font-size: 1em;
}
h6 {
   font-size: 1em;
    color: #777;
}
p,
blockquote,
ul,
ol,
dl,
table{
    margin: 0.8em 0;
}
li>ol,
li>ul {
    margin: 0 0;
}
hr {
    height: 2px;
    padding: 0;
    margin: 16px 0;
    background-color: #e7e7e7;
    border: 0 none;
    overflow: hidden;
    box-sizing: content-box;
}

li p.first {
    display: inline-block;
}
ul,
ol {
    padding-left: 30px;
}
ul:first-child,
ol:first-child {
    margin-top: 0;
}
ul:last-child,
ol:last-child {
    margin-bottom: 0;
}
blockquote {
    border-left: 4px solid #dfe2e5;
    padding: 0 15px;
    color: #777777;
}
blockquote blockquote {
    padding-right: 0;
}
table {
    padding: 0;
    word-break: initial;
}
table tr {
    border-top: 1px solid #dfe2e5;
    margin: 0;
    padding: 0;
}
table tr:nth-child(2n),
thead {
    background-color: #f8f8f8;
}
table tr th {
    font-weight: bold;
    border: 1px solid #dfe2e5;
    border-bottom: 0;
    margin: 0;
    padding: 6px 13px;
}
table tr td {
    border: 1px solid #dfe2e5;
    margin: 0;
    padding: 6px 13px;
}
table tr th:first-child,
table tr td:first-child {
    margin-top: 0;
}
table tr th:last-child,
table tr td:last-child {
    margin-bottom: 0;
}

.CodeMirror-lines {
    padding-left: 4px;
}

.code-tooltip {
    box-shadow: 0 1px 1px 0 rgba(0,28,36,.3);
    border-top: 1px solid #eef2f2;
}

.md-fences,
code,
tt {
    border: 1px solid #e7eaed;
    background-color: #f8f8f8;
    border-radius: 3px;
    padding: 0;
    padding: 2px 4px 0px 4px;
    font-size: 0.9em;
}

code {
    background-color: #f3f4f4;
    padding: 0 2px 0 2px;
}

.md-fences {
    margin-bottom: 15px;
    margin-top: 15px;
    padding-top: 8px;
    padding-bottom: 6px;
}


.md-task-list-item > input {
  margin-left: -1.3em;
}

@media print {
    html {
        font-size: 13px;
    }
    table,
    pre {
        page-break-inside: avoid;
    }
    pre {
        word-wrap: break-word;
    }
}

.md-fences {
	background-color: #f8f8f8;
}
#write pre.md-meta-block {
	padding: 1rem;
    font-size: 85%;
    line-height: 1.45;
    background-color: #f7f7f7;
    border: 0;
    border-radius: 3px;
    color: #777777;
    margin-top: 0 !important;
}

.mathjax-block>.code-tooltip {
	bottom: .375rem;
}

.md-mathjax-midline {
    background: #fafafa;
}

#write>h3.md-focus:before{
	left: -1.5625rem;
	top: .375rem;
}
#write>h4.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
#write>h5.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
#write>h6.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
.md-image>.md-meta {
    /*border: 1px solid #ddd;*/
    border-radius: 3px;
    padding: 2px 0px 0px 4px;
    font-size: 0.9em;
    color: inherit;
}

.md-tag {
    color: #a7a7a7;
    opacity: 1;
}

.md-toc { 
    margin-top:20px;
    padding-bottom:20px;
}

.sidebar-tabs {
    border-bottom: none;
}

#typora-quick-open {
    border: 1px solid #ddd;
    background-color: #f8f8f8;
}

#typora-quick-open-item {
    background-color: #FAFAFA;
    border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
    border-style: solid;
    border-width: 1px;
}

/** focus mode */
.on-focus-mode blockquote {
    border-left-color: rgba(85, 85, 85, 0.12);
}

header, .context-menu, .megamenu-content, footer{
    font-family: "Segoe UI", "Arial", sans-serif;
}

.file-node-content:hover .file-node-icon,
.file-node-content:hover .file-node-open-state{
    visibility: visible;
}

.mac-seamless-mode #typora-sidebar {
    background-color: #fafafa;
    background-color: var(--side-bar-bg-color);
}

.md-lang {
    color: #b4654d;
}

.html-for-mac .context-menu {
    --item-hover-bg-color: #E6F0FE;
}

#md-notification .btn {
    border: 0;
}

.dropdown-menu .divider {
    border-color: #e5e5e5;
}

.ty-preferences .window-content {
    background-color: #fafafa;
}

.ty-preferences .nav-group-item.active {
    color: white;
    background: #999;
}


</style>
</head>
<body class='typora-export os-windows' >
	<button id="mode-toggle" class="btn" >💡</button>
	<!--返回顶部-->
	<div class="home">
		<a href="../front.html" class="glyphicon glyphicon-menu-left"></a>
	</div>
	<button onclick="topFunction()" id="topButton" class="glyphicon glyphicon-menu-up"></button>
	<button onclick="showOrCloseCategory()" id="foldOrUnfold" class="glyphicon glyphicon-th-large"></button>
	
	<!--文章主体部分-->
	<div class="book-body" id="book_body"> </div>
	<!--目录栏-->
	<div class="book-summary" id="category" style="display:none"></div>
<div  id='write'  class = ''><h1><a name="git--github-学习路线" class="md-header-anchor"></a><span>Git &amp; GitHub 学习路线</span></h1><p><span>不喜欢阅读文字的同学可以看视频讲解：</span><a href='https://www.bilibili.com/video/BV1KZ4y1e7cG'><span>https://www.bilibili.com/video/BV1KZ4y1e7cG(opens new window)</span></a></p><h2><a name="介绍" class="md-header-anchor"></a><span>介绍</span></h2><h3><a name="git--github-是什么" class="md-header-anchor"></a><span>Git / GitHub 是什么？</span></h3><p><span>Git 是目前最主流的 </span><code>分布式版本控制系统</code><span> （Version Control System），是团队协作开发不可或缺的工具。它可以保存和管理文件的所有更新记录、并且使用 </span><strong><span>版本号</span></strong><span> 进行区分。从而支持将编辑后的文档恢复到修改前的状态（历史版本）、对比不同版本的文件差异、防止旧版本覆盖新版本等功能。</span></p><p><span>GtiHub 是目前最主流的、免费的 </span><code>代码开源托管平台</code><span> ，可以理解为一个存储和管理代码的 “网盘”。所有用户或团队都可以把自己的代码上传到 GitHub 进行共享和维护、从 GitHub 下载代码等。开发者们可以从 GitHub 上白嫖代码，进行学习或引用。</span></p><p><span>很多同学刚开始容易把这两个概念搞混，其实很好区分，Git 和 GitHub 的区别和关系如下：</span></p><ol><li><span>Git 是工具，而 GitHub 是平台。</span></li><li><span>我们可以用 Git 之外的版本控制系统（比如 SVN）来向 GitHub 提交代码；同样可以用 Git 将代码提交到 GitHub 之外的其他代码托管平台（比如企业级代码托管平台 GitLab）上。</span></li></ol><blockquote><p><span>SVN 和 Git  是同类的工具，两者的用法很相似。但目前 Git 相对更主流一些，因此只学习 Git 足够了。</span></p></blockquote><h3><a name="为什么要用-git--github" class="md-header-anchor"></a><span>为什么要用 Git / GitHub？</span></h3><h4><a name="git" class="md-header-anchor"></a><span>Git</span></h4><p><span>Git 起初是由 Linux 的创始人 Linus Torvalds 为了更好地管理 Linux 内核开发而创立的。Linux 的内核开发极其复杂，我们可以试想一下，如果有 100 个人要共同来开发这样一个大型项目、维护同一个代码目录和文件，怎么样才能够保证大家的代码不重复、不冲突、即时共享呢？难道要把代码放到 U 盘里，每个人写完代码后再拷贝到别人电脑上么？</span></p><p><span>肯定不行对吧，这样做不仅麻烦，而且只能人为去解决冲突，可能会出现下面的对话：</span></p><p><span>A：“哎，这行我改了，你别改！”</span></p><p><span>B：“TNND，你改了也不跟我说一声。”</span></p><p><span>所以 Git 的出现正是为了解决上述难题。</span></p><p><span>使用 Git 工具，大家可以很方便地拉取和提交代码、及时得到代码的修改信息、对比新老代码之间的差异等，让系统代替人工来自动检查和解决冲突。从而提高团队协作开发的效率，保证代码和项目的稳定推进。</span></p><p><span>除了团队开发外，我们自己做项目时也可以用 Git 来管理代码，如果一不小心改错或者删除了文件，可以快速还原。</span></p><p><span>因此 Git 也是目前开发岗同学 </span><strong><span>必学</span></strong><span> 的技能，企业开发的基本功。</span></p><h4><a name="github" class="md-header-anchor"></a><span>GitHub</span></h4><p><span>既然要团队协作开发，那么大家肯定要 </span><strong><span>共享代码</span></strong><span> ，在同一套代码的基础上进行开发。所以需要一个集中存储和管理代码的地方，所有团队成员都能访问到。而且不同于网盘，最好大家能使用 Git 工具来操作代码的上传和拉取，并且在平台上方便地浏览和对比代码。</span></p><p><span>于是，有能力的公司开始自己建设公司内部的代码托管平台。但是对大多数小公司来说，他们没有这种条件自建，只能依赖其他大公司的代码托管服务。</span></p><p><span>此外，在 Linux 之父以及很多优秀程序员的影响下，越来越多的程序员倡导 </span><strong><span>开源</span></strong><span> ，认为软件开发应当是开放的，所有开发者都可以加入贡献。而开源的背后，必须要有一个开放共享的代码托管平台来支撑，而不是每个公司的代码都被封闭在自己内部的平台上。</span></p><p><span>于是，以 GitHub 为代表的代码托管平台出现了。团队可以利用 GitHub 进行协作开发；开发者可以轻松阅读并参与到世界知名的开源项目中；我们每位同学也都可以免费使用 GitHub 上的代码，站在巨人的肩膀上打造自己的项目，或者通过参与开源来提升个人影响力等。</span></p><p><span>此外，如今的 GitHub 还提供了更多强大的功能，比如问题讨论、在线编程、托管网站、自动构建项目等，对开发者非常有帮助。除了代码外，鱼皮也经常把一些需要团队内共享的文档上传到 GitHub 私仓和其他成员协作，免费无限制谁不爱呢？</span></p><p><span>当然，GitHub 只是代码托管平台中最有代表性的一个，其他知名的代码开源托管平台有国内的 Gitee、国外的 Bitbucket 等；面向企业的私有代码托管平台有 GitLab、腾讯工蜂等。它们没有什么本质的区别，都是平台而已，会用 GitHub，就会用其他的。</span></p><p><span>综上，强烈建议大家养成使用 GitHub 的习惯，感受开源的魅力。</span></p><h2><a name="学习条件" class="md-header-anchor"></a><span>学习条件</span></h2><ol><li><span>学过至少一门编程语言后就可以学习 Git 了</span></li><li><span>准备开发个人完整项目前建议学习。注意是完整项目，还停留在初学编程语言写练习阶段的同学先不用学，抓紧熟悉编程语言就好。</span></li><li><span>正式找工作前必须学习！</span></li></ol><h2><a name="学习建议" class="md-header-anchor"></a><span>学习建议</span></h2><ol><li><span>Git 只是工具，学 Git 的时候可以轻松一些，千万不要去背命令！初学者只要先了解工作中常用命令的作用、提交代码的流程，然后跟着教程实操一遍，有个大致的印象就够了。忘了的话就掏出说明书（百度 / 文档等），随用随查即可。因此建议将专门学习 Git 的时间控制在 1 天内，一般几个小时就足够了，最快的话只用十几分钟也能上手。</span></li><li><span>虽然现在有很多傻瓜式可视化 Git 工具，但还是建议初学 Git 的同学多自己手敲 Git 命令，可以多把自己平时写的练习代码用 Git 上传到 GitHub 上管理，用的多了自然就熟悉了。</span></li><li><span>Git 的学习不是一蹴而就的。随着你使用 Git 管理的项目越来越多、工作经验越来越丰富，你对 Git 和 GitHub 的熟练程度才会越来越高。总之，想学好 Git，实践是关键。</span></li></ol><h2><a name="学习路线" class="md-header-anchor"></a><span>学习路线</span></h2><p><span>Git 本身只是一个工具，不涉及太多复杂的的理论知识，看了说明书就能用；再加上现在很多主流的开发工具都支持可视化地操作 Git 来管理项目，将它的使用成本降到了最低。所以我们可以随用随学，哪怕之前完全不会，工作用到时也可以直接 </span><strong><span>赶鸭子上架</span></strong><span> ，做到能用界面来拉取和提交代码、完成开发即可。</span></p><p><span>我自己刚开始接触 Git 的时候就是这样，完全没有上网搜教程，就是看别人提交项目的时候用到了这个工具、在编辑器上点几下就可以了，觉得很厉害很方便。然后我就有样学样地用起了这个工具，而且很长一段时间我都是用 GitHub Desktop 来傻瓜式的操作，遇到问题了再上网搜解决方案。</span></p><p><span>这里我建议大家无论是否要学习 Git，都可以先把它安装到你的电脑中（直接去官网安装）。因为有可能一些软件或工具会依赖 Git，不装的话后面会出现一些问题。</span></p><h4><a name="目标" class="md-header-anchor"></a><span>目标</span></h4><ol><li><span>能用软件操作 Git 来拉取和提交代码</span></li></ol><h4><a name="资源" class="md-header-anchor"></a><span>资源</span></h4><p><span>⭐️ Git 官方下载：</span><a href='https://git-scm.com/downloads'><span>https://git-scm.com/downloads(opens new window)</span></a></p><p><span>Git 可视化管理软件：</span></p><blockquote><p><span>一般情况下不用额外安装软件，用开发工具自带的 Git 可视化功能即可（比如 IDEA、VS Code 等）</span></p></blockquote><ul><li><span>⭐️ GitKraken：</span><a href='https://www.gitkraken.com/' target='_blank' class='url'>https://www.gitkraken.com/</a><span>（炫酷且友好）</span></li><li><span>Sourcetree：</span><a href='https://www.sourcetreeapp.com/'><span>https://www.sourcetreeapp.com/(opens new window)</span></a></li><li><span>TortoiseGit：</span><a href='https://tortoisegit.org/'><span>https://tortoisegit.org/(opens new window)</span></a></li><li><span>GitHub Desktop：</span><a href='https://desktop.github.com/'><span>https://desktop.github.com/(opens new window)</span></a></li><li><span>Git GUI（安装 Git 后自带）</span></li></ul><h3><a name="一git-基础" class="md-header-anchor"></a><span>一、Git 基础</span></h3><p><span>虽然使用可视化工具也可以操作 Git 完成开发工作，但如果不了解 Git 的概念和每个操作具体做了什么，在团队开发中很容易出现问题（比如出现冲突）。</span></p><p><span>因此本阶段的目标如下：</span></p><h4><a name="目标-n84" class="md-header-anchor"></a><span>目标</span></h4><ol><li><span>了解 Git 基本概念和常用命令的作用（理论）</span></li><li><span>能够使用 Git 命令来管理和提交项目代码（实践）</span></li></ol><h4><a name="知识点" class="md-header-anchor"></a><span>知识点</span></h4><ul><li><p><span>⭐️ 基本概念</span></p><ul><li><span>什么是 Git（版本控制系统）</span></li><li><span>什么是 GitHub（代码托管平台）</span></li><li><span>Git 和 GitHub 的作用</span></li><li><span>Git 和 GitHub 的联系与区别</span></li></ul></li><li><p><span>⭐️ Git 概念</span></p><ul><li><span>工作区</span></li><li><span>暂存区（索引）</span></li><li><span>本地版本库</span></li><li><span>远程仓库</span></li><li><span>Git 文件状态</span></li><li><span>版本</span></li><li><span>HEAD</span></li><li><span>分支</span></li></ul></li><li><p><span>Git 的安装</span></p></li><li><p><span>Git 常见配置（git config）</span></p><ul><li><p><span>修改配置</span></p><ul><li><span>个人信息</span></li></ul></li><li><p><span>查看配置</span></p></li></ul></li><li><p><span>⭐️ Git 基本操作（开发流程）</span></p><ul><li><span>初始化仓库（git init）</span></li><li><span>克隆（git clone）</span></li><li><span>暂存（git add）</span></li><li><span>提交（git commit）</span></li><li><span>推送（git push）</span></li><li><span>拉取（git fetch）</span></li><li><span>拉取合并（git pull）</span></li><li><span>😐 查看状态（git status）</span></li><li><span>😐 查看历史（git log）</span></li></ul></li><li><p><span>⭐️ 分支操作</span></p><ul><li><span>创建分支</span></li><li><span>查看分支</span></li><li><span>切换分支</span></li><li><span>删除分支</span></li><li><span>合并分支（git merge）</span></li></ul></li></ul><h4><a name="学习方法" class="md-header-anchor"></a><span>学习方法</span></h4><p><span>入门 Git 时没必要买书，而是直接看网上的文档或视频教程，大概花几分钟 ~ 几小时就可以入门了。</span></p><p><span>比如 </span><a href='https://backlog.com/git-tutorial/cn/'><span>猴子都能懂的 Git 入门 (opens new window)</span></a><span>，图文并茂、通俗易懂，看完入门篇就足够了：</span></p><p><img src="https://xingqiu-tuchuang-1256524210.cos.ap-shanghai.myqcloud.com/1/image-20220623195749271.png#id=qSReP&amp;originHeight=780&amp;originWidth=2008&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=shadow&amp;title=" referrerpolicy="no-referrer" alt="img"></p><p><span>或者看 B 站上一些免费的分享，比如下面资源里提到的一节课入门视频，可以帮助你快速了解 Git。</span></p><p><span>但是大家要切记，</span><strong><span>一定要跟着教程敲命令</span></strong><span> ，自己走完一套从新建文件到提交文件的完整流程！</span></p><p><span>还可以配合可视化工具来观察每个命令执行带来的效果，比如 IDEA 会自动把 Git 托管的文件变成绿色，从而帮助你理解每个命令的作用。</span></p><p><span>Git 的分支概念还是很重要的，大家可以使用 </span><a href='https://learngitbranching.js.org/?locale=zh_CN'><span>Learning Git Branching (opens new window)</span></a><span>这个在线游戏来学习和理解分支。</span></p><blockquote><p><span>当然，习惯阅读官方文档的同学也可以直接看 Git 官方文档入门。</span></p></blockquote><h4><a name="资源-n178" class="md-header-anchor"></a><span>资源</span></h4><p><span>在线文档：</span></p><ul><li><span>⭐️ 猴子都能懂的 Git 入门：</span><a href='https://backlog.com/git-tutorial/cn/' target='_blank' class='url'>https://backlog.com/git-tutorial/cn/</a><span>（强烈推荐）</span></li><li><span>菜鸟教程：</span><a href='https://www.runoob.com/git/git-tutorial.html'><span>https://www.runoob.com/git/git-tutorial.html(opens new window)</span></a></li><li><span>廖雪峰的教程：</span><a href='https://www.liaoxuefeng.com/wiki/896043488029600/'><span>https://www.liaoxuefeng.com/wiki/896043488029600/(opens new window)</span></a></li><li><span>Git 简明指南：</span><a href='http://rogerdudler.github.io/git-guide/index.zh.html'><span>http://rogerdudler.github.io/git-guide/index.zh.html (opens new window)</span></a><span>（几分钟看一遍就好，可以用来复习）</span></li></ul><p><span>视频教程：</span></p><blockquote><p><span>Git 相关的入门视频太多了，B 站随便一搜一大把</span></p></blockquote><ul><li><span>一节课入门：</span><a href='https://www.bilibili.com/video/BV1s3411g7PS'><span>https://www.bilibili.com/video/BV1s3411g7PS (opens new window)</span></a><span>（18 分钟）</span></li><li><span>一节课入门：</span><a href='https://www.bilibili.com/video/BV1KD4y1S7FL'><span>https://www.bilibili.com/video/BV1KD4y1S7FL (opens new window)</span></a><span>（10 分钟）</span></li><li><span>5h 打通 Git 全套教程：</span><a href='https://www.bilibili.com/video/BV1vy4y1s7k6'><span>https://www.bilibili.com/video/BV1vy4y1s7k6 (opens new window)</span></a><span>（较完整，时间多的话可以看）</span></li></ul><p><span>在线游戏：</span></p><ul><li><span>⭐️ Learning Git Branching：</span><a href='https://learngitbranching.js.org/?locale=zh_CN'><span>https://learngitbranching.js.org/?locale=zh_CN (opens new window)</span></a><span>（帮助你学习 Git 分支的用法）</span></li></ul><p><span>工具：</span></p><ul><li><span>⭐️ Git 命令大全：</span><a href='https://backlog.com/git-tutorial/cn/reference/'><span>https://backlog.com/git-tutorial/cn/reference/ (opens new window)</span></a><span>（适合收藏）</span></li><li><span>Git 参考手册：</span><a href='http://gitref.justjavac.com/'><span>http://gitref.justjavac.com/ (opens new window)</span></a><span>（只列举了常用的命令，不是很全）</span></li></ul><h3><a name="二github-基础" class="md-header-anchor"></a><span>二、GitHub 基础</span></h3><p><span>可以把 GitHub 简单理解为一个资源网站，第一次接触 GitHub 时直接注册一个账号，然后在搜索框里输入你想搜的东西就可以了，不需要任何的教程。但是如果我们想上传代码到 GitHub、更好地用它来管理项目，还是有必要了解一下平台的玩法。</span></p><h4><a name="目标-n211" class="md-header-anchor"></a><span>目标</span></h4><ol><li><span>熟悉 GitHub 基本操作，并能够使用 GitHub 来管理代码</span></li><li><span>了解如何利用 GitHub 搜索和下载项目代码</span></li><li><span>了解 GitHub 协作流程；了解开源，并能向开源项目提交代码</span></li></ol><h4><a name="知识点-n219" class="md-header-anchor"></a><span>知识点</span></h4><ul><li><p><span>什么是 GitHub？</span></p></li><li><p><span>⭐️ 如何访问 GitHub？</span></p></li><li><p><span>⭐️ 基本概念</span></p><ul><li><p><span>仓库</span></p></li><li><p><span>分支</span></p><ul><li><span>主分支</span></li></ul></li><li><p><span>README</span></p></li><li><p><span>Star</span></p></li><li><p><span>Follow</span></p></li><li><p><span>账户类型（个人 / 组织）</span></p></li></ul></li><li><p><span>必备操作</span></p><ul><li><p><span>⭐️ 搜索仓库 / 代码</span></p></li><li><p><span>创建仓库</span></p><ul><li><span>公开</span></li><li><span>私有</span></li></ul></li><li><p><span>Fork 仓库</span></p></li><li><p><span>Watch 仓库</span></p></li><li><p><span>⭐️ 上传本地代码</span></p></li><li><p><span>修改个人信息</span></p></li></ul></li><li><p><span>⭐️ GitHub Flow 协作流程</span></p><ul><li><span>克隆 / Fork 仓库</span></li><li><span>创建分支</span></li><li><span>修改代码</span></li><li><span>发起 Pull Request</span></li><li><span>Code Review</span></li><li><span>Merge 分支</span></li><li><span>删除分支</span></li></ul></li><li><p><span>⭐️ 了解 GitHub Issues</span></p></li><li><p><span>⭐️ 贡献代码流程</span></p></li></ul><h4><a name="学习方法-n284" class="md-header-anchor"></a><span>学习方法</span></h4><p><span>我们学 GitHub 时主要是了解这个平台提交代码的规则以及和他人协作的方法，因此还是以实践为主。</span></p><p><span>推荐先在 B 站上找一个 GitHub 的短视频分享，了解下 GitHub 是个啥，大概咋用（下面有推荐视频）。然后再按照 GitHub  官方提供的 </span><a href='https://docs.github.com/cn/get-started/quickstart/hello-world'><span>Hello World 入门教程 (opens new window)</span></a><span>来实操一遍流程，基本就了解大家是如何在 GitHub 上协作的了。</span></p><p><span>之后我建议大家可以像读课外书一样阅读下 </span><a href='https://github.phodal.com/'><span>《GitHub 漫游指南》 (opens new window)</span></a><span>，能够比较全面地加深你对 GitHub 的了解。</span></p><h4><a name="资源-n288" class="md-header-anchor"></a><span>资源</span></h4><p><span>文档：</span></p><ul><li><span>⭐️ GitHub 官方 Hello World 入门：</span><a href='https://docs.github.com/cn/get-started/quickstart/hello-world'><span>https://docs.github.com/cn/get-started/quickstart/hello-world (opens new window)</span></a><span>（带你体验一次完整的 GitHub 开发流程）</span></li><li><span>⭐️ GitHub 漫游指南：</span><a href='https://github.phodal.com/'><span>https://github.phodal.com/ (opens new window)</span></a><span>（很多作者个人的实战经验，建议当课外书读，受益匪浅）</span></li><li><span>⭐️ 教你给开源项目贡献代码：</span><a href='https://github.com/firstcontributions/first-contributions/blob/master/translations/README.chs.md'><span>https://github.com/firstcontributions/first-contributions/blob/master/translations/README.chs.md(opens new window)</span></a></li><li><span>⭐️ 开源指北：</span><a href='https://oschina.gitee.io/opensource-guide/'><span>https://oschina.gitee.io/opensource-guide/ (opens new window)</span></a><span>（给开源新手的保姆级开源百科，建议当课外书读）</span></li></ul><p><span>视频：</span></p><ul><li><span>一节课入门：</span><a href='https://www.bilibili.com/video/BV1hS4y1S7wL'><span>https://www.bilibili.com/video/BV1hS4y1S7wL(opens new window)</span></a></li><li><span>5 分钟入门：</span><a href='https://www.bilibili.com/video/BV1hS4y1S7wL'><span>https://www.bilibili.com/video/BV1hS4y1S7wL(opens new window)</span></a></li><li><span>如何利用 GitHub 找到优质项目：</span><a href='https://www.bilibili.com/video/BV1Ki4y1T7Cu'><span>https://www.bilibili.com/video/BV1Ki4y1T7Cu (opens new window)</span></a><span>（鱼皮早期作品，特么青涩！）</span></li></ul><p><span>工具：</span></p><ul><li><span>⭐️ 如何更快地访问 GitHub：</span><a href='https://github.com/dotnetcore/FastGithub'><span>https://github.com/dotnetcore/FastGithub (opens new window)</span></a><span>（进不去可以自行百度：fast github）</span></li><li><span>⭐️ GitHub 备忘清单：</span><a href='https://training.github.com/downloads/zh_CN/github-git-cheat-sheet/'><span>https://training.github.com/downloads/zh_CN/github-git-cheat-sheet/ (opens new window)</span></a><span>（包含了常用命令）</span></li></ul><h3><a name="三git-进阶" class="md-header-anchor"></a><span>三、Git 进阶</span></h3><p><span>企业开发项目可能会比较复杂，往往会面临两个问题：</span></p><ol><li><span>项目更大，更难管理</span></li><li><span>协作人员更多，更容易出现冲突</span></li></ol><p><span>如果协作开发时出现了代码冲突，又不了解如何解决的话，就很可能导致提交了错误的代码影响项目，或者丢失自己写过的代码。</span></p><p><span>因此我们需要进一步了解 Git，学习实际工作中可能要用到的操作、经验和技巧，更好地管理团队项目和协作。</span></p><h4><a name="目标-n322" class="md-header-anchor"></a><span>目标</span></h4><ol><li><span>学习 Git 高级操作，尤其是能够熟练地规避和解决冲突</span></li><li><span>了解企业常用的 Git 协作流程和规范，能独立管理项目</span></li></ol><h4><a name="知识点-n328" class="md-header-anchor"></a><span>知识点</span></h4><ul><li><p><span>高级操作</span></p><ul><li><span>标签（git tag）</span></li><li><span>检出（git checkout）</span></li><li><span>⭐️ 贮藏（git stash）</span></li><li><span>清理（git clean）</span></li><li><span>变基（git rebase）</span></li><li><span>重置（git reset）</span></li><li><span>还原（git revert）</span></li><li><span>😐 检索（git grep）</span></li><li><span>😐 展示差异（git diff）</span></li><li><span>😐 溯源（git blame）</span></li><li><span>😐 参考日志（git reflog）</span></li><li><span>😐 交互式命令行（-i 参数）</span></li></ul></li><li><p><span>⭐️ 预防冲突</span></p></li><li><p><span>⭐️ 解决冲突（重中之重）</span></p></li><li><p><span>⭐️ 配置 SSH</span></p></li><li><p><span>子模块</span></p></li><li><p><span>Git 钩子</span></p><ul><li><span>提交钩子（pre-commit）</span></li></ul></li><li><p><span>⭐️ 忽略提交（Gitignore）</span></p></li><li><p><span>⭐️ cherry-pick</span></p></li><li><p><span>分布式工作流程</span></p></li><li><p><span>Git worktree</span></p></li><li><p><span>Git Flow</span></p></li><li><p><span>😐 Git 内部原理</span></p></li><li><p><span>Monorepo</span></p></li><li><p><span>了解其他版本控制系统，和 Git 对比</span></p></li></ul><h4><a name="学习方法-n386" class="md-header-anchor"></a><span>学习方法</span></h4><p><span>其实我们在大多数情况下是用不到上面那些高级命令的，但是一定要知道有这么个命令和用法，在关键时刻才能想起来，然后再去通过官方文档和百度去搜详情即可。</span></p><p><span>所以，建议大家有空完整地阅读一遍 Git 的官方文档（支持中文、详细又权威），有些地方看不懂或记不住也没关系（比如像 reset 的几种模式），有个大致的印象就行。</span></p><p><span>学好 Git 最主要的方法还是多实操，比如实际工作中最实用的技能之一 —— 解决代码冲突，只有经历过的同学才会懂。不过如今的编辑器基本都自带了可视化解决冲突的功能，通过红绿等颜色来区分代码，可比我们用命令行要方便和清晰多了，所以也不用去记忆相关的命令。</span></p><p><span>另外，建议大家去网上了解一下企业开发中常用的 Git 协作机制，比如怎么定义分支、怎么个提交代码的流程等，如图：</span></p><p><img src="https://xingqiu-tuchuang-1256524210.cos.ap-shanghai.myqcloud.com/1/webp#id=nopW5&amp;originHeight=341&amp;originWidth=586&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=shadow&amp;title=" referrerpolicy="no-referrer" alt="img"></p><p><span>还可以了解一些 “先进” 的协作方式，比如一些大公司在采用的 Monorepo（单仓 / 大仓）方案，了解它和传统项目管理模式的优缺点。</span></p><p><span>此外，大家感兴趣的话也可以深入下 Git 工具的原理，如果能够自己做出一个类似的系统，相信在简历上也会是个不错的项目~</span></p><h4><a name="资源-n394" class="md-header-anchor"></a><span>资源</span></h4><ul><li><span>⭐️ Git 官方文档：</span><a href='https://git-scm.com/book/zh/v2'><span>https://git-scm.com/book/zh/v2 (opens new window)</span></a><span>（强烈推荐，有图有文，全面详细）</span></li><li><span>Git Flow 演示学习：</span><a href='http://danielkummer.github.io/git-flow-cheatsheet/index.zh_CN.html'><span>http://danielkummer.github.io/git-flow-cheatsheet/index.zh_CN.html(opens new window)</span></a></li><li><span>Git Flow 学习：</span><a href='https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/git-flow'><span>https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/git-flow(opens new window)</span></a></li><li><span>Monorepo 学习：</span><a href='https://www.jianshu.com/p/c10d0b8c5581'><span>https://www.jianshu.com/p/c10d0b8c5581(opens new window)</span></a></li></ul><p><span>工具：</span></p><ul><li><span>Git 中文开发手册：</span><a href='https://www.php.cn/manual/view/34943.html'><span>https://www.php.cn/manual/view/34943.html (opens new window)</span></a><span>（可以用来查命令）</span></li></ul><h3><a name="四github-进阶" class="md-header-anchor"></a><span>四、GitHub 进阶</span></h3><p><span>如今 GitHub 的能力已经非常强了，除了代码的管理和检索外，它还集成了各种辅助团队开发和运营的功能。</span></p><h4><a name="目标-n410" class="md-header-anchor"></a><span>目标</span></h4><ol><li><span>按需学习更多 GitHub 功能，提升研发效率、更好地管理项目</span></li><li><span>尝试用心维护和推广自己的 GitHub 项目</span></li></ol><h4><a name="知识点-n416" class="md-header-anchor"></a><span>知识点</span></h4><ul><li><p><span>开发</span></p><ul><li><span>⭐️ 配置 SSH 拉取</span></li><li><span>😐 GitHub 快捷键</span></li><li><span>😐 GitHub 命令面板</span></li><li><span>😐 GitHub Apps</span></li><li><span>代码安全</span></li></ul></li><li><p><span>协作</span></p><ul><li><span>⭐️ GitHub Codespaces</span></li><li><span>GitHub Discussions</span></li><li><span>Pull Requests</span></li></ul></li><li><p><span>项目管理</span></p><ul><li><span>Organizations 组织</span></li><li><span>GitHub Issues 问题反馈</span></li><li><span>😐 GitHub Projects 项目管理</span></li><li><span>Insights 数据分析</span></li><li><span>贡献者管理</span></li><li><span>开源协议</span></li></ul></li><li><p><span>DevOps</span></p><ul><li><span>⭐️ GitHub Pages 网站托管</span></li><li><span>Gitpod 代码托管</span></li><li><span>GitHub Actions</span></li><li><span>😐 GitHub Packages</span></li><li><span>GitHub Webhook</span></li></ul></li><li><p><span>😐 Git 私服搭建</span></p><ul><li><span>GitLab</span></li><li><span>Gogs</span></li></ul></li></ul><h4><a name="学习方法-n475" class="md-header-anchor"></a><span>学习方法</span></h4><p><span>进阶 GitHub 最好的方式就是 </span><strong><span>阅读官方文档</span></strong><span> ！</span></p><p><span>因为首先官方文档通常比任何教程都 </span><strong><span>全面、权威、准确</span></strong><span> ；再加上 GitHub 的更新迭代很快、时不时会推出一些新功能，导致网上的教程和文章很难做到实时和官方同步。</span></p><p><span>而 GitHub 的官方文档不仅支持中文，而且写的非常通俗好懂，本身就是一个贴心的教程了。所以建议大家跟着文档来学习，完整阅读一遍后，相信你会学到很多之前完全没关注过的 GitHub 功能，帮助自己更好地利用这个平台。</span></p><p><span>此外，大家也可以多看一些其他同学分享的 GitHub 小技巧，比如我之前分享过的：按句号键就能用 web 编辑器直接打开项目，从而给我们带来极大的方便。（下面也给大家列举了一些我之前分享过的 GitHub 骚操作）</span></p><h4><a name="资源-n480" class="md-header-anchor"></a><span>资源</span></h4><p><span>文档：</span></p><ul><li><span>⭐️ GitHub 官方文档：</span><a href='https://docs.github.com/cn'><span>https://docs.github.com/cn(opens new window)</span></a></li><li><span>⭐️ GitHub 秘籍：</span><a href='https://snowdream86.gitbooks.io/github-cheat-sheet/content/zh/'><span>https://snowdream86.gitbooks.io/github-cheat-sheet/content/zh/ (opens new window)</span></a><span>（收录了一些 Git 和 Github 非常酷同时又少有人知的功能）</span></li><li><span>⭐️ GitHub 隐藏技巧：</span><a href='https://www.bilibili.com/video/BV1q54y1f7h6'><span>https://www.bilibili.com/video/BV1q54y1f7h6(opens new window)</span></a></li><li><span>让你的 GitHub 秒变高大上：</span><a href='https://mp.weixin.qq.com/s?__biz=MzI1NDczNTAwMA==&amp;mid=2247491908&amp;idx=1&amp;sn=568e8c0dcb54a610d886eb992d424273&amp;scene=21#wechat_redirect'><span>https://mp.weixin.qq.com/s?__biz=MzI1NDczNTAwMA==&amp;mid=2247491908&amp;idx=1&amp;sn=568e8c0dcb54a610d886eb992d424273&amp;scene=21#wechat_redirect(opens new window)</span></a></li><li><span>GitHub 骚操作：</span><a href='https://mp.weixin.qq.com/s?__biz=MzI1NDczNTAwMA==&amp;mid=2247495440&amp;idx=1&amp;sn=99147cdcb7c881c9d983e7b2373abcdb&amp;scene=21#wechat_redirect'><span>https://mp.weixin.qq.com/s?__biz=MzI1NDczNTAwMA==&amp;mid=2247495440&amp;idx=1&amp;sn=99147cdcb7c881c9d983e7b2373abcdb&amp;scene=21#wechat_redirect(opens new window)</span></a></li></ul><p><span>工具：</span></p><ul><li><span>GitHub 快捷键：</span><a href='https://docs.github.com/cn/get-started/using-github/keyboard-shortcuts'><span>https://docs.github.com/cn/get-started/using-github/keyboard-shortcuts(opens new window)</span></a></li><li><span>GitHub 命令面板：</span><a href='https://docs.github.com/cn/get-started/using-github/github-command-palette'><span>https://docs.github.com/cn/get-started/using-github/github-command-palette(opens new window)</span></a></li></ul><h2><a name="面试考点" class="md-header-anchor"></a><span>面试考点</span></h2><p><span>其实 Git 在面试中的占比一般是很低的，至少我秋招 20 多轮面试中 1 次都没被问到过。所以大家不用刻意去准备，多去用它、积累经验就好了。</span></p><p><span>不过时间足够的同学也可以了解一下常见的面试题，比如下面这些：</span></p><h4><a name="理论" class="md-header-anchor"></a><span>理论</span></h4><ol><li><span>简述 Git 的原理和工作流程</span></li><li><span>什么是版本控制系统？为什么需要版本控制系统？</span></li><li><span>git fetch 和 git pull 命令的区别？</span></li><li><span>git rebase 和 git merge 命令的区别？</span></li><li><span>什么是 Git Flow，它有什么好处？</span></li><li><span>什么是暂存区？Git 为什么需要暂存区？</span></li></ol><h4><a name="实践" class="md-header-anchor"></a><span>实践</span></h4><ol><li><span>分享下你在团队中使用 Git 协作开发的流程（从拉取项目到上线）</span></li><li><span>如何控制某些文件不被提交？</span></li><li><span>什么情况下提交会冲突，如何解决冲突？</span></li><li><span>不小心改错了代码、删除了文件，如何恢复？</span></li><li><span>不小心提交错了文件，如何撤销？</span></li><li><span>团队开发中，如何区分和管理分支？</span></li><li><span>如果让你负责团队，会怎么管理项目的代码？</span></li><li><span>如何防止错误的代码提交？</span></li></ol></div>
</body>
<script src="./js/jquery.min.js"></script>
<script src="./js/highlight.min.js"></script>
<script src="js/index.js"></script>
</html>